package com.xbongbong.paas.service;

import com.xbongbong.paas.pojo.dto.FormListInProcessDTO;
import com.xbongbong.paas.pojo.dto.MenuCopyDTO;
import com.xbongbong.paas.pojo.dto.MenuFormAddDTO;
import com.xbongbong.paas.pojo.dto.MenuFormDelDTO;
import com.xbongbong.paas.pojo.dto.MenuGroupAddDTO;
import com.xbongbong.paas.pojo.dto.MenuGroupDelDTO;
import com.xbongbong.paas.pojo.dto.MenuListDTO;
import com.xbongbong.paas.pojo.dto.MenuNameCheckDTO;
import com.xbongbong.paas.pojo.dto.MenuReportAddDTO;
import com.xbongbong.paas.pojo.dto.MenuReportDelDTO;
import com.xbongbong.paas.pojo.dto.MenuSortDTO;
import com.xbongbong.paas.pojo.dto.MenuUpdateDTO;
import com.xbongbong.paas.pojo.dto.MobileMenuListDTO;
import com.xbongbong.paas.pojo.dto.MobileProcessFormListDTO;
import com.xbongbong.paas.pojo.dto.ProcessFormListDTO;
import com.xbongbong.paas.pojo.vo.FormListInProcessVO;
import com.xbongbong.paas.pojo.vo.MenuCopyVO;
import com.xbongbong.paas.pojo.vo.MenuFormAddVO;
import com.xbongbong.paas.pojo.vo.MenuFormDelVO;
import com.xbongbong.paas.pojo.vo.MenuGroupAddVO;
import com.xbongbong.paas.pojo.vo.MenuGroupDelVO;
import com.xbongbong.paas.pojo.vo.MenuListVO;
import com.xbongbong.paas.pojo.vo.MenuNameCheckVO;
import com.xbongbong.paas.pojo.vo.MenuReportAddVO;
import com.xbongbong.paas.pojo.vo.MenuReportDelVO;
import com.xbongbong.paas.pojo.vo.MenuSortVO;
import com.xbongbong.paas.pojo.vo.MenuUpdateVO;
import com.xbongbong.paas.pojo.vo.MobileMenuListVO;
import com.xbongbong.paas.pojo.vo.MobileProcessFormListVO;
import com.xbongbong.paas.pojo.vo.ProcessFormListVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.app.pojo.dto.AppMenuFormIdDTO;
import com.xbongbong.pro.app.pojo.vo.AppMenuFormIdVO;
import com.xbongbong.pro.menu.pojo.MenuReturnPojo;
import com.xbongbong.pro.menu.pojo.dto.ControlCenterMenuListDTO;
import com.xbongbong.pro.menu.pojo.dto.ControlCenterMenuSetListDTO;
import com.xbongbong.pro.menu.pojo.dto.ControlCenterMenuSortDTO;
import com.xbongbong.pro.menu.pojo.dto.ControlMenuSetDTO;
import com.xbongbong.pro.menu.pojo.dto.HomeMenuSetListDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuChangeStateDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuFormAddBatchDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuGroupAddBatchDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuNewListDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuQueryDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuSetDTO;
import com.xbongbong.pro.menu.pojo.dto.MenuTopDTO;
import com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuListVO;
import com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuSetListVO;
import com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuSortVO;
import com.xbongbong.pro.menu.pojo.vo.ControlMenuSetVO;
import com.xbongbong.pro.menu.pojo.vo.HomeMenuSetListVO;
import com.xbongbong.pro.menu.pojo.vo.MenuChangeStateVO;
import com.xbongbong.pro.menu.pojo.vo.MenuFormAddBatchVO;
import com.xbongbong.pro.menu.pojo.vo.MenuGroupAddBatchVO;
import com.xbongbong.pro.menu.pojo.vo.MenuNewListVO;
import com.xbongbong.pro.menu.pojo.vo.MenuQueryVO;
import com.xbongbong.pro.menu.pojo.vo.MenuSetVO;
import com.xbongbong.pro.menu.pojo.vo.MenuTopVO;

import java.util.List;

/**
 * 菜单初始化
 * @author 吴峰
 * @version v1.0
 * @date 2018/8/15 19:51
 * @desrcption 菜单初始化
 * @since v1.0
 */
public interface PaasMenuService {

    /**
     * 表单菜单
     * @param menuFormAddDTO 菜单添加DTO
     * @return MenuFormAddVO
     * @throws XbbException 可能出现业务异常
     */
    MenuFormAddVO addFormMenu(MenuFormAddDTO menuFormAddDTO) throws XbbException;

    /**
     * 检查模板名称重名
     * @param menuNameCheckDTO 菜单名称检查DTO
     * @return MenuFormAddVO
     * @throws XbbException 可能出现业务异常
     */
    MenuNameCheckVO checkTemplateName(MenuNameCheckDTO menuNameCheckDTO) throws XbbException;

    /**
     * 批量插入菜单
     * @author 吴峰
     * @date 2019/1/16 16:10
     * @param menuFormAddBatchDTO 传入对象
     * @return com.xbongbong.pro.menu.pojo.vo.MenuFormAddBatchVO
     * @throws XbbException
     */
    MenuFormAddBatchVO addBatchFormMenu(MenuFormAddBatchDTO menuFormAddBatchDTO) throws XbbException;
    /**
     * 批量插入分组
     * @author 吴峰
     * @date 2019/1/16 16:10
     * @param menuGroupAddBatchDTO 传入对象
     * @return com.xbongbong.pro.menu.pojo.vo.MenuGroupAddBatchVO
     * @throws XbbException
     */
    MenuGroupAddBatchVO addBatchGroupMenu(MenuGroupAddBatchDTO menuGroupAddBatchDTO) throws XbbException;

    /**
     * 新建菜单
     * @param menuGroupAddDTO 菜单添加DTO
     * @return MenuGroupAddVO
     * @throws XbbException 可能出现业务异常
     */
    MenuGroupAddVO addMenu(MenuGroupAddDTO menuGroupAddDTO) throws XbbException;


    /**
     * 表单菜单
     * @param menuReportAddDTO 菜单添加DTO
     * @return MenuReportAddVO
     * @throws XbbException 可能出现业务异常
     */
    MenuReportAddVO addReportMenu(MenuReportAddDTO menuReportAddDTO) throws XbbException;
    /**
     * 更新菜单
     * @author wufeng
     * @date 2018/8/8 15:22
     * @param menuUpdateDTO 菜单更新DTO
     * @descption  更新菜单
     * @return MenuUpdateVO
     * @throws XbbException 可能出现业务异常
     */
    MenuUpdateVO updateMenu(MenuUpdateDTO menuUpdateDTO) throws XbbException;

    /**
     * 删除菜单
     * @author wufeng
     * @date 2018/8/8 15:22
     * @param menuGroupDelDTO 菜单删除DTO
     * @descption  删除菜单
     * @return MenuGroupDelVO
     * @throws XbbException 可能出现业务异常
     */
    MenuGroupDelVO deleteMenu(MenuGroupDelDTO menuGroupDelDTO) throws XbbException;
    /**
     * 删除菜单
     * @author wufeng
     * @date 2018/8/8 15:22
     * @param menuFormDelDTO 菜单删除DTO
     * @descption  删除菜单
     * @return MenuFormDelVO
     * @throws XbbException 可能出现业务异常
     */
    MenuFormDelVO deleteFormMenu(MenuFormDelDTO menuFormDelDTO) throws XbbException;
    /**
     * 删除报表
     * @author wufeng
     * @date 2018/8/8 19:45
     * @param menuReportDelDTO
     * @descption  删除报表
     * @return MenuReportDelVO
     * @throws XbbException 可能出现业务异常
     */
    MenuReportDelVO deleteReportMenu(MenuReportDelDTO menuReportDelDTO) throws XbbException;

    /**
     * 菜单列表
     * @author wufeng
     * @date 2018/8/8 19:45
     * @param menuListDTO
     * @descption  菜单列表
     * @return AppMenuListVO
     * @throws XbbException 可能出现业务异常
     */
    MenuListVO listMenu(MenuListDTO menuListDTO) throws XbbException;

    /**
     * 排序
     * @author wufeng
     * @date 2018/8/8 19:45
     * @param menuSortDTO
     * @descption  排序
     * @return MenuSortVO
     * @throws XbbException 可能出现业务异常
     */
    MenuSortVO sortMenu(MenuSortDTO menuSortDTO) throws XbbException;

    /**
     * 检索当前公司的应用下可用的流程表单
     * @param processFormListDTO
     * @return
     * @throws XbbException 可能出现业务异常
     */
    ProcessFormListVO getProcessFormList(ProcessFormListDTO processFormListDTO) throws XbbException;
    /**
     * 检索当前公司的某个应用下可用的流程表单
     * @param processFormListDTO
     * @return
     * @throws XbbException 可能出现业务异常
     */
    MobileProcessFormListVO getMobileProcessFormList(MobileProcessFormListDTO processFormListDTO) throws XbbException;

    /**
     * 菜单列表
     * @param mobileMenuListDTO
     * @return
     * @throws XbbException
     */
    MobileMenuListVO mobileMenuList(MobileMenuListDTO mobileMenuListDTO) throws XbbException;

    /**
     * 复制菜单
     * @param menuCopyDTO
     * @return
     * @throws XbbException
     */
    MenuCopyVO copy(MenuCopyDTO menuCopyDTO) throws XbbException;

    /**
     * 获取流程表单列表
     * @param formListInProcessDTO
     * @return
     * @throws XbbException
     */
    FormListInProcessVO formListInProcess(FormListInProcessDTO formListInProcessDTO) throws XbbException;

    /**
     * 应用&菜单开启/关闭逻辑
     * @param menuChangeStateDTO 关联业务DTO
     * @return 关联业务VO
     * @throws XbbException 业务异常
     */
    MenuChangeStateVO changeState(MenuChangeStateDTO menuChangeStateDTO) throws XbbException;

    /**
     * 菜单列表
     * @author wufeng
     * @date 2019/1/8 16:02
     * @param menuNewListDTO
     * @descption  菜单列表
     * @return AppMenuListVO
     * @throws XbbException 可能出现业务异常
     */
    MenuNewListVO list(MenuNewListDTO menuNewListDTO) throws XbbException;

    /**
     * 获取appId，menuId，formId等信息
     *
     * @return AppMenuListVO
     * @throws XbbException 可能出现业务异常
     * @author long.rao
     * @date 2019-05-13 10:47
     */
    AppMenuFormIdVO getAppFormMenuId(AppMenuFormIdDTO appMenuFormIdDTO) throws XbbException;

    /**
     * 首页菜单信息
     * @param menuTopDTO
     * @return
     * @throws XbbException
     */
    MenuTopVO topMenuList(MenuTopDTO menuTopDTO) throws XbbException;

    /**
     * 菜单设置
     * @param menuSetDTO
     * @return
     * @throws XbbException
     */
    MenuSetVO set(MenuSetDTO menuSetDTO) throws XbbException;

    /**
     * 公司快捷新建和常用表单设置
     * @param menuSetDTO
     * @return
     * @throws XbbException
     */
    ControlMenuSetVO controlSet(ControlMenuSetDTO menuSetDTO) throws XbbException;

    /**
     * 获取管理中心菜单列表
     * @author 吴峰
     * @date 2019/1/11 10:25
     * @param controlCenterMenuListDTO
     * @descption
     * @return com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuListVO
     * @throws XbbException
     */
    ControlCenterMenuListVO controlCenterMenuList(ControlCenterMenuListDTO controlCenterMenuListDTO) throws XbbException;

    /**
     * 管理中心菜单设置的应用及菜单列表
     * @author 吴峰
     * @date 2019/1/11 17:33
     * @param controlCenterMenuSetListDTO 前端传参
     * @return com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuSetListVO
     * @throws XbbException
     */
    ControlCenterMenuSetListVO controlCenterMenuSetList(ControlCenterMenuSetListDTO controlCenterMenuSetListDTO) throws XbbException;

    /**
     * 管理中心-菜单设置-菜单排序
     * @author 吴峰
     * @date 2019/1/11 20:06
     * @param controlCenterMenuSortDTO 前端传参
     * @return com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuSortVO
     * @throws XbbException
     */
    ControlCenterMenuSortVO controlCenterMenuSort(ControlCenterMenuSortDTO controlCenterMenuSortDTO) throws XbbException;
    /**
     * 根据名称检索应用和菜单
     * @author wufeng
     * @date 10:03 2019/1/25
     * @desrcption
     * @param menuQueryDTO
     * @return com.xbongbong.pro.menu.pojo.vo.MenuQueryVO
     * @throws XbbException
    */
    MenuQueryVO queryMenuByName(MenuQueryDTO menuQueryDTO) throws XbbException;

    /**
     * 首页-菜单设置-菜单排序
     * @author 吴峰
     * @date 2019/1/11 20:06
     * @param homeMenuSetListDTO 前端传参
     * @return com.xbongbong.pro.menu.pojo.vo.ControlCenterMenuSortVO
     * @throws XbbException
     */
    HomeMenuSetListVO homeMenuSetList(HomeMenuSetListDTO homeMenuSetListDTO) throws XbbException;
    /**
     * 获取常用表单列表
     * @author 吴峰
     * @date 2019/1/10 16:52
     * @param menuNewListDTO
     * @param menuNewListVO
     * @param searchSelfConfig true 搜索个人配置项 false bu搜索个人配置项
     * @param searchCompanyConfig true 搜索公司配置项， false 不搜索公司配置项
     * @descption
     * @return java.util.Set<java.lang.Long> 常用表单的set集合
     * @throws XbbException
     */
    List<MenuReturnPojo> getCommonFormList(MenuNewListDTO menuNewListDTO, MenuNewListVO menuNewListVO,
                                       boolean searchSelfConfig, boolean searchCompanyConfig) throws XbbException;
    /**
     * 获取快捷新建表单列表
     * @param menuNewListDTO
     * @param menuNewListVO
     * @param searchSelfConfig true 搜索个人配置项 false bu搜索个人配置项
     * @param searchCompanyConfig true 搜索公司配置项， false 不搜索公司配置项
     * @return 返回快捷新建的set容器
     * @throws XbbException
     */
    List<MenuReturnPojo> getQuickNewFormList(MenuNewListDTO menuNewListDTO, MenuNewListVO menuNewListVO,
                                             boolean searchSelfConfig, boolean searchCompanyConfig) throws XbbException;
    /**
     * 校验度言和呼叫中心
     * @param corpid 公司id
     * @param alias 标识
     * @throws XbbException
     */
    void validateCallCenter(String corpid, String alias) throws XbbException;

    /**
     * 判断某个菜单是否开启
     * @param corpid 公司id
     * @param alias @see XbbRefTypeEnum
     * @return boolean true 开启 false 关闭
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    boolean enableMenu(String corpid, String alias) throws XbbException;

}
